package com.example.demo.arithmetic.algorithm.dynamic_programing;

import java.util.Arrays;

public class Leetcode62 {


    public int uniquePaths(int m, int n) {
        // 递推公式
        //        arr[i][j] = arr[i-1][j]+arr[i][j-1]

        // 二维数组记录已知的结果

        int[][] arr = new int[m][n];

        // 初始化

        // 第一行都为1
        for (int j = 0; j < arr[0].length; j++) {
            arr[0][j] = 1;
        }

        for (int i = 0; i < arr.length; i++) {
            arr[i][0] = 1;
        }
        //1 1 1 1 1 1 1
        //1 0 0 0 0 0 0
        //1 0 0 0 0 0 0
        //        for (int i = 0; i < arr.length; i++) {
        //            for (int j = 0; j < arr[i].length; j++) {
        //                System.out.print(arr[i][j] + " ");
        //            }
        //            System.out.println();
        //        }

        for (int i = 1; i < arr.length; i++) {
            for (int j = 1; j < arr[i].length; j++) {
                arr[i][j] = arr[i - 1][j] + arr[i][j - 1];
            }
        }

        return arr[m - 1][n - 1];
    }

    public int uniquePaths2(int m, int n) {
        // 递推公式
        //        arr[i][j] = arr[i-1][j]+arr[i][j-1]

        // 降维为1维数组记录已知的结果

        int[] arr = new int[n];

        // 初始化

        // 第一行都为1
        for (int j = 0; j < n; j++) {
            arr[j] = 1;
        }


        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                arr[j] = arr[j - 1] + arr[j];
            }
        }

        return arr[n - 1];
    }

    public static void main(String[] args) {
        System.out.println(new Leetcode62().uniquePaths(3, 7));
        System.out.println(new Leetcode62().uniquePaths2(3, 7));
    }
}
